home *** CD-ROM | disk | FTP | other *** search
/ USA Bestseller / USA BESTSELLER Vol 1-95 (Hepp-Computer)(1995).iso / e190 / bench.asm < prev    next >
Assembly Source File  |  1995-02-20  |  7KB  |  354 lines

  1. .286
  2. ;;   Compact model!
  3.  
  4. LOCALS
  5.  
  6. ;; ----------------- UNINITIALIZED FAR DATA --------------------------
  7.  
  8. _FARBSS SEGMENT PARA PUBLIC 'FAR_BSS'
  9.     EXTRN ram_buffer:BYTE:64016
  10. _FARBSS ENDS
  11.  
  12. ;; --------------------------- CODE ----------------------------------
  13.  
  14. _TEXT SEGMENT PARA PUBLIC 'CODE'
  15.  
  16. PUBLIC _M13WriteB,_M13WriteW1,_M13ReadW1,_M13VTransW1
  17. PUBLIC _TwWriteB,_TwWriteW1,_TwReadW1,_TwVTrans
  18.  
  19. ASSUME CS:_TEXT,DS:_FARBSS,ES:NOTHING
  20.  
  21. ALIGN 16
  22. ;; ------------------------------------------------------------------ ;;
  23. ;;   extern "C" void M13WriteB();
  24. ;; ------------------------------------------------------------------
  25. ;;   Do a straight 64,000 byte Blit in mode 13h, 10 times over.
  26. ;; ------------------------------------------------------------------ ;;
  27.  
  28. _M13WriteB PROC
  29.     push ds si di
  30.  
  31.     mov ax,_FARBSS
  32.     mov ds,ax
  33.  
  34.     mov ax,0a000h
  35.     mov es,ax
  36.  
  37.     mov bx,10
  38. @@TopLoop:
  39.     xor di,di
  40.     mov si,OFFSET ram_buffer
  41.     mov cx,64000
  42.     rep movsb
  43.  
  44.     dec bx
  45.     jnz @@TopLoop
  46.  
  47.     pop di si ds
  48.     ret
  49. _M13WriteB ENDP
  50.  
  51. ALIGN 16
  52. ;; ------------------------------------------------------------------ ;;
  53. ;;   extern "C" void M13WriteW1();
  54. ;; ------------------------------------------------------------------
  55. ;;   Do a straight 64,000 byte Blit in mode 13h, 10 times over.
  56. ;; ------------------------------------------------------------------ ;;
  57.  
  58. _M13WriteW1 PROC
  59.     push ds si di
  60.  
  61.     mov ax,_FARBSS
  62.     mov ds,ax
  63.  
  64.     mov ax,0a000h
  65.     mov es,ax
  66.  
  67.     mov bx,10
  68. @@TopLoop:
  69.     xor di,di
  70.     mov si,OFFSET ram_buffer
  71.     mov cx,64000/2
  72.     rep movsw
  73.  
  74.     dec bx
  75.     jnz @@TopLoop
  76.  
  77.     pop di si ds
  78.     ret
  79. _M13WriteW1 ENDP
  80.  
  81. ALIGN 16
  82. ;; ------------------------------------------------------------------ ;;
  83. ;;   extern "C" void M13ReadW1();
  84. ;; ------------------------------------------------------------------
  85. ;;   Do a 64,000 byte read from mode 13h using WORD moves.
  86. ;; ------------------------------------------------------------------ ;;
  87.  
  88. _M13ReadW1 PROC
  89.     push ds si di
  90.  
  91.     mov ax,0a000h
  92.     mov ds,ax
  93.  
  94.     mov ax,_FARBSS
  95.     mov es,ax
  96.  
  97.     mov bx,10
  98. @@TopLoop:
  99.     mov di,OFFSET ram_buffer
  100.     xor si,si
  101.     mov cx,64000/2
  102.     rep movsw
  103.  
  104.     dec bx
  105.     jnz @@TopLoop
  106.  
  107.     pop di si ds
  108.     ret
  109. _M13ReadW1 ENDP
  110.  
  111. ALIGN 16
  112. ;; ------------------------------------------------------------------ ;;
  113. ;;   extern "C" void M13VTransW1();
  114. ;; ------------------------------------------------------------------
  115. ;;    Video-to-Video Transfer using Word moves, aligned.
  116. ;; ------------------------------------------------------------------ ;;
  117. _M13VTransW1 PROC
  118.     push ds si di
  119.  
  120.     mov ax,0a000h
  121.     mov es,ax
  122.     mov ds,ax
  123.  
  124.     mov bx,10
  125. @@TopLoop:
  126.     xor di,di
  127.     mov si,2    ;; move _from_ 1 word ahead, to behind 1 word
  128.     mov cx,64000/2
  129.     rep movsw
  130.  
  131.     dec bx
  132.     jnz @@TopLoop
  133.  
  134.     pop di si ds
  135.     ret
  136. _M13VTransW1 ENDP
  137.  
  138. ALIGN 16
  139. ;; ------------------------------------------------------------------ ;;
  140. ;;   extern "C" void TwWriteB();
  141. ;; ------------------------------------------------------------------
  142. ;;   Do a planar 64,000 byte Blit in Tweaked mode, 10 times over.
  143. ;; ------------------------------------------------------------------ ;;
  144.  
  145. _TwWriteB PROC
  146.     push ds si di
  147.  
  148.     mov ax,_FARBSS
  149.     mov ds,ax
  150.  
  151.     mov ax,0a000h
  152.     mov es,ax
  153.  
  154.     mov bx,10
  155. @@TopLoop:
  156.     mov dx,03c4h
  157.     mov al,02h
  158.     out dx,al  ;; set up for map mask reg
  159.     inc dx
  160.  
  161.     mov al,1   ;; start at plane 0
  162.     out dx,al
  163.     xor di,di
  164.     mov si,OFFSET ram_buffer
  165.     mov cx,16000
  166.     rep movsb
  167.  
  168.     shl al,1
  169.     out dx,al  ;; plane 1
  170.     xor di,di
  171.     mov cx,16000
  172.     rep movsb
  173.  
  174.     shl al,1
  175.     out dx,al  ;; plane 2
  176.     xor di,di
  177.     mov cx,16000
  178.     rep movsb
  179.  
  180.     shl al,1
  181.     out dx,al  ;; plane 3
  182.     xor di,di
  183.     mov cx,16000
  184.     rep movsb
  185.  
  186.     dec bx
  187.     jnz @@TopLoop
  188.  
  189.     pop di si ds
  190.     ret
  191. _TwWriteB ENDP
  192.  
  193. ALIGN 16
  194. ;; ------------------------------------------------------------------ ;;
  195. ;;   extern "C" void TwWriteW1();
  196. ;; ------------------------------------------------------------------
  197. ;;   Do a planar 64,000 byte Blit in Tweaked mode, 10 times over.
  198. ;; ------------------------------------------------------------------ ;;
  199.  
  200. _TwWriteW1 PROC
  201.     push ds si di
  202.  
  203.     mov ax,_FARBSS
  204.     mov ds,ax
  205.  
  206.     mov ax,0a000h
  207.     mov es,ax
  208.  
  209.     mov bx,10
  210. @@TopLoop:
  211.     mov dx,03c4h
  212.     mov al,02h
  213.     out dx,al  ;; set up for map mask reg
  214.     inc dx
  215.  
  216.     mov al,1   ;; start at plane 0
  217.     out dx,al
  218.     xor di,di
  219.     mov si,OFFSET ram_buffer
  220.     mov cx,16000/2
  221.     rep movsw
  222.  
  223.     shl al,1
  224.     out dx,al  ;; plane 1
  225.     xor di,di
  226.     mov cx,16000/2
  227.     rep movsw
  228.  
  229.     shl al,1
  230.     out dx,al  ;; plane 2
  231.     xor di,di
  232.     mov cx,16000/2
  233.     rep movsw
  234.  
  235.     shl al,1
  236.     out dx,al  ;; plane 3
  237.     xor di,di
  238.     mov cx,16000/2
  239.     rep movsw
  240.  
  241.     dec bx
  242.     jnz @@TopLoop
  243.  
  244.     pop di si ds
  245.     ret
  246. _TwWriteW1 ENDP
  247.  
  248.  
  249. ALIGN 16
  250. ;; ------------------------------------------------------------------ ;;
  251. ;;   extern "C" void TwReadW1();
  252. ;; ------------------------------------------------------------------
  253. ;;   Do a planar 64,000 byte read from Tweaked mode using WORD moves.
  254. ;; ------------------------------------------------------------------ ;;
  255.  
  256. _TwReadW1 PROC
  257.     push ds si di
  258.  
  259.     mov ax,0a000h
  260.     mov ds,ax
  261.  
  262.     mov ax,_FARBSS
  263.     mov es,ax
  264.  
  265.     mov bx,10
  266. @@TopLoop:
  267.     mov dx,03ceh
  268.     mov al,04h
  269.     out dx,al  ;; set up for Read map reg
  270.     inc dx
  271.  
  272.     mov al,0   ;; start at plane 0
  273.     out dx,al
  274.     xor si,si
  275.     mov di,OFFSET ram_buffer
  276.     mov cx,16000/2
  277.     rep movsw
  278.  
  279.     inc al
  280.     out dx,al  ;; plane 1
  281.     xor si,si
  282.     mov cx,16000/2
  283.     rep movsw
  284.  
  285.     inc al
  286.     out dx,al  ;; plane 2
  287.     xor si,si
  288.     mov cx,16000/2
  289.     rep movsw
  290.  
  291.     inc al
  292.     out dx,al  ;; plane 3
  293.     xor si,si
  294.     mov cx,16000/2
  295.     rep movsw
  296.  
  297.     dec bx
  298.     jnz @@TopLoop
  299.  
  300.     pop di si ds
  301.     ret
  302. _TwReadW1 ENDP
  303.  
  304. ALIGN 16
  305. ;; ------------------------------------------------------------------ ;;
  306. ;;   extern "C" void TwVTrans();
  307. ;; ------------------------------------------------------------------
  308. ;;   Do a video-to-video 64,000 byte copy, using write mode 1 of
  309. ;;   the video card. This allows a 32-bit move with a single MOVSB
  310. ;;   instruction, which equals 4 pixels in 'tweaked' mode.
  311. ;; ------------------------------------------------------------------ ;;
  312.  
  313. _TwVTrans PROC
  314.     push ds si di
  315.  
  316.     mov ax,0a000h
  317.     mov ds,ax
  318.     mov es,ax
  319.  
  320. ;;   Reset map mask to all planes
  321.     mov dx,03c4h
  322.     mov ax,0f02h
  323.     out dx,ax
  324.  
  325.     mov bx,10
  326. @@TopLoop:
  327. ;;   Set to write mode 1 (video-to-video transfer)
  328.  
  329.     mov dx,03ceh
  330.     mov ax,04105h
  331.     out dx,ax
  332.  
  333.     xor di,di
  334.     mov si,1        ;; move data from 1 byte ahead, to 1 byte behind
  335.  
  336.     mov cx,64000/4
  337.     rep movsb
  338.  
  339. ;;   Reset back to write mode 0 (normal setting)
  340.     mov dx,03ceh
  341.     mov ax,04005h
  342.     out dx,ax
  343.  
  344.     dec bx
  345.     jnz @@TopLoop
  346.  
  347.     pop di si ds
  348.     ret
  349. _TwVTrans ENDP
  350.  
  351. _TEXT ENDS
  352.  
  353. END
  354.